using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data;


namespace CapaAccesoDatos.Clases
{
    class HoraCAD
    {
        //-------------------------------------------------------------------------------//
        // Propiedades de la Clase.                                                      //
        //-------------------------------------------------------------------------------//
        private int id;
        private string descripcion;

        //-------------------------------------------------------------------------------//
        // Accesores publicos de la Clase.                                               //
        //-------------------------------------------------------------------------------//
        private int Id 
        {
            get { return this.id; }
        }
        private string Descripcion 
        {
            get { return this.descripcion; } 
        }

        //-------------------------------------------------------------------------------//
        // Constructores de la Clase.                                                    //
        //-------------------------------------------------------------------------------//
        internal HoraCAD(int Id, string Descripcion) 
        {
            this.id = Id;
            this.descripcion = Descripcion;
        }

        //-------------------------------------------------------------------------------//
        // Estos son los metodos de la interface                                         //
        //-------------------------------------------------------------------------------//
        public static void Save(HoraCAD Objeto)
        {
            String SqlCommand = "INSERT INTO " + Constantes.Tablas.Horas.Nombre + "(" +
                                Constantes.Tablas.Horas.Campo_Id + ", " +
                                Constantes.Tablas.Horas.Campo_Descripcion +                                 
                                ") VALUES (" + Objeto.Id.ToString() + ", '" + 
                                Objeto.Descripcion + "')";
            //Sentencia:   
            /* INSERT INTO Tabla (Columna1, Columna2...)        
             * VALUES (Registro1, Registro2....);      
             */

            SqlConnection Conexion = new SqlConnection(Constantes.ConnectionString);
            SqlCommand Comando = new SqlCommand(SqlCommand, Conexion);
            SqlTransaction Tx = null;

            try
            {
                Conexion.Open();              
                Tx = Conexion.BeginTransaction();               
                Comando.Transaction = Tx;          
                Comando.ExecuteNonQuery();           
                Tx.Commit(); 
            }
            catch (Exception Ex)
            {
                Tx.Rollback();
                throw new System.Exception("ERROR: Se ha producido un error en la conexion con la base de datos.\n " +
                           "FUNCION: HorasCAD.Save(<args>)\n " +
                           "INNEREXCEPT:" + Ex.Message, Ex);
            }
            finally
            {               
                Conexion.Close();
                Comando.Dispose();
                Conexion.Dispose();
            }
            return;
        }
        public static void Update(HoraCAD Objeto)
        {
            String SqlCommand = "UPDATE " + Constantes.Tablas.Horas.Nombre + " SET " +
                                Constantes.Tablas.Horas.Campo_Id + "=" + Objeto.Id.ToString() + ", " +
                                Constantes.Tablas.Horas.Campo_Descripcion + "='" + Objeto.Descripcion +
                                "' WHERE " + Constantes.Tablas.Horas.Campo_Id + "= " + Objeto.Id.ToString();
            // Sentencia:
            /* UPDATE Tabla SET Columna1 = valor1, Columna2 = valor2 ...
             * WHERE Id = ObjetoId;*/

            SqlConnection Conexion = new SqlConnection(Constantes.ConnectionString);
            SqlCommand Comando = new SqlCommand(SqlCommand, Conexion);
            SqlTransaction Tx = null;

            try
            {
                Conexion.Open();             
                Tx = Conexion.BeginTransaction();                
                Comando.Transaction = Tx;           
                Comando.ExecuteNonQuery();         
                Tx.Commit(); 
            }
            catch (Exception Ex)
            {
                Tx.Rollback();
                throw new System.Exception("ERROR: Se ha producido un error en la conexion con la base de datos.\n " +
                           "FUNCION: HorasCAD.Update(<args>)\n " +
                           "INNEREXCEPT:" + Ex.Message, Ex);
            }
            finally
            {           
                Conexion.Close();
                Comando.Dispose();
                Conexion.Dispose();
            }
            return;
        }
        public static void Delete(HoraCAD Objeto)
        {
            String SqlCommand = "DELETE FROM " + Constantes.Tablas.Horas.Nombre + " WHERE "
                                + Constantes.Tablas.Horas.Campo_Id + "= " + Objeto.Id.ToString();
            //Sentencia:
            /*DELETE FROM Tabla WHERE Id (de la tabla) = Id;*/

            SqlConnection Conexion = new SqlConnection(Constantes.ConnectionString);
            SqlCommand Comando = new SqlCommand(SqlCommand, Conexion);
            SqlTransaction Tx = null;

            try
            {
                Conexion.Open();               
                Tx = Conexion.BeginTransaction();               
                Comando.Transaction = Tx;         
                Comando.ExecuteNonQuery();              
                Tx.Commit();
            }
            catch (Exception Ex)
            {
                Tx.Rollback();
                throw new System.Exception("ERROR: Se ha producido un error en la conexion con la base de datos.\n " +
                           "FUNCION: HorasCAD.Delete(<args>)\n " +
                           "INNEREXCEPT:" + Ex.Message, Ex);
            }
            finally
            {                
                Conexion.Close();
                Comando.Dispose();
                Conexion.Dispose();
            }
            return;
        }


    }
}
